import pygame
import sys

# 初始化pygame
pygame.init()

# 设置窗口大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("战士移动、跳跃和挥剑")

# 定义颜色
WHITE = (255, 255, 255)
GRAVITY = 0.5  # 重力加速度

# 加载战士和剑的图片
warrior_image = pygame.image.load("pictures/monster.jpg")  # 替换为你的战士图片路径
sword_image = pygame.image.load("pictures/blank.jpg")     # 替换为你的剑图片路径

# 调整图片大小
warrior_image = pygame.transform.scale(warrior_image, (100, 100))
sword_image = pygame.transform.scale(sword_image, (100, 100))

# 定义战士的初始位置和速度
warrior_width, warrior_height = warrior_image.get_size()
warrior_x = width // 2
warrior_y = height - warrior_height
warrior_speed_x = 0
warrior_speed_y = 0
is_jumping = False

# 定义剑的位置和状态
sword_width, sword_height = sword_image.get_size()
sword_x = warrior_x + warrior_width
sword_y = warrior_y + warrior_height // 2 - sword_height // 2
is_swinging = False
swing_angle = 0  # 剑的旋转角度

# 主循环
clock = pygame.time.Clock()
while True:
    screen.fill(WHITE)  # 清屏

    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        # 键盘按下事件
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                warrior_speed_x = -5  # 向左移动
            if event.key == pygame.K_RIGHT:
                warrior_speed_x = 5  # 向右移动
            if event.key == pygame.K_UP and not is_jumping:
                warrior_speed_y = -15  # 跳跃初速度
                is_jumping = True
            if event.key == pygame.K_SPACE and not is_swinging:
                is_swinging = True  # 开始挥剑

        # 键盘松开事件
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT and warrior_speed_x < 0:
                warrior_speed_x = 0  # 停止左移
            if event.key == pygame.K_RIGHT and warrior_speed_x > 0:
                warrior_speed_x = 0  # 停止右移

    # 更新战士的位置
    warrior_x += warrior_speed_x
    warrior_y += warrior_speed_y

    # 重力效果
    if is_jumping:
        warrior_speed_y += GRAVITY
        if warrior_y >= height - warrior_height:  # 落地
            warrior_y = height - warrior_height
            warrior_speed_y = 0
            is_jumping = False

    # 边界检测
    if warrior_x < 0:
        warrior_x = 0
    if warrior_x > width - warrior_width:
        warrior_x = width - warrior_width

    # 更新剑的位置和状态
    if is_swinging:
        swing_angle += 10  # 剑的旋转角度增加
        if swing_angle >= 90:  # 挥剑完成
            is_swinging = False
            swing_angle = 0
    else:
        sword_x = warrior_x + warrior_width
        sword_y = warrior_y + warrior_height // 2 - sword_height // 2

    # 绘制战士
    screen.blit(warrior_image, (warrior_x, warrior_y))

    # 绘制剑
    if is_swinging:
        rotated_sword = pygame.transform.rotate(sword_image, swing_angle)
        screen.blit(rotated_sword, (sword_x, sword_y))
    else:
        screen.blit(sword_image, (sword_x, sword_y))

    # 刷新屏幕
    pygame.display.flip()
    clock.tick(60)  # 60帧每秒